package q;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class Server implements Runnable {
private BlockingQueue<Task> bq=new LinkedBlockingQueue<Task>();
private int serverNr;
private int averageServiceTime=0;
private int nrTasks =0 ;
int nr=0;
public Server(int serverNr){
this.serverNr=serverNr;
}
public boolean isEmpty() {
return bq.isEmpty();
}
public void addTask(Task t) {
bq.add(t);
System.out.println("Task: "+ t.getnr()+ " added to queue "+ serverNr + " with processing time "+ t.getpTime()+" at the arival time "+ t.getaTime());
}
public int queueSize() {
return bq.size();
}
@Override
public void run() {
while (true) {
try {
Task t = bq.take();
System.out.println("Server"+serverNr +": "+"Task "+t.getnr()+" is beying processed");
Thread.sleep(t.getpTime()*100);
averageServiceTime=averageServiceTime+t.getpTime();
nrTasks++;
System.out.println("Task " + t.getnr()+" was processed");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public float getAverageServiceTime() {
return (float) (averageServiceTime/nrTasks);
}
}